package example.array;

import java.util.Arrays;

/**
 * Created by lenovo on 2016/11/4 0004.
 * 使用sort()方法对Java数组进行排序，及如何使用 insertElement () 方法向数组插入元素,
 */
public class InsertElement {
    public static void main(String[] args) {
        int array[] = {2, 5, -2, 6, -3, 8, 0, -7, -9, 4};
        Arrays.sort(array);
        //调用自定义方法
        printArray("数组排序", array);
        //二分查找方法,返回找到的元素下标，若没有，就返回index = （-（插入点下标）-1）
        int index = Arrays.binarySearch(array, 1);
        System.out.println("元素 1 所在位置（负数为不存在）："
                + index);
        int newIndex = -index - 1;
        //调用自定义的插入元素到指定位置的方法
        array = insertElement(array, 1, newIndex);
        printArray("数组添加元素 1", array);
    }

    /**
     * 自定义的输出数组元素的方法
     *
     * @param message 提示标题信息
     * @param array   数组对象
     */
    private static void printArray(String message, int array[]) {
        System.out.println(message
                + ": [length: " + array.length + "]");
        for (int i = 0; i < array.length; i++) {
            if (i != 0) {
                System.out.print(", ");
            }
            System.out.print(array[i]);
        }
        System.out.println();
    }

    /**
     * 自定义插入元素到指定位置的方法
     *
     * @param original 原始数组
     * @param element  需要插入的元素
     * @param index    插入的指定位置
     * @return 返回新的插入后的数组
     */
    private static int[] insertElement(int original[],
                                       int element, int index) {
        int length = original.length;
        int destination[] = new int[length + 1];
        //copy 前半部分
        System.arraycopy(original, 0, destination, 0, index);
        //插入指定元素
        destination[index] = element;
        //再copy后半部分
        System.arraycopy(original, index, destination, index
                + 1, length - index);
        return destination;
    }
}
